module ram_rw(
	input sys_clk,
    input sys_rst_n
);

//端口 A 时钟
wire 	   clka;
//端口 A 使能，高电平使能
wire        cea;
//端口 A 写使能,高电平写入
wire        wea;
//端口 A 地址
wire [7:0] addra;
//写入端口 A 的数据
wire [7:0] dia;

//端口 B 时钟
wire       clkb;
//端口 B 使能，高电平使能
wire        ceb;
//端口 B 地址
wire [7:0] addrb;
//端口 B 读出的数据
wire [7:0] dob;

//读写计数，0~127为写入状态，128~255为读取状态
reg [15:0] wr_cnt;


//进行读写计数
always @(posedge sys_clk) begin
	if(!sys_rst_n)
    	wr_cnt <= 16'd0;
    else if(wr_cnt < 256)
    	wr_cnt <= wr_cnt + 16'd1;
	else
    	wr_cnt <= 16'd0;
end


//端口 A 时钟
assign clka = sys_clk;

//端口 A 使能
assign cea = ((sys_rst_n == 1'b1) && ((wr_cnt >= 16'd0) && (wr_cnt < 16'd128))) ? 1'b1 : 1'b0;

//端口 A 写使能
assign wea = ((sys_rst_n == 1'b1) && ((wr_cnt >= 16'd0) && (wr_cnt < 16'd128))) ? 1'b1 : 1'b0;

//端口 A 地址,0~127
assign addra = (wea == 1'b1) ? wr_cnt[6:0] : 7'h0;

//端口 A 写入数据，从地址0~127依次写入如1~128
assign dia = (wea == 1'b1) ? (addra + 8'b1) : 0;


//端口 B 时钟
assign clkb = sys_clk;

//端口 B 使能
assign ceb = ((sys_rst_n == 1'b1) && ((wr_cnt >= 16'd128) && (wr_cnt < 16'd256))) ? 1'b1 : 1'b0;

//端口 B 地址,0~127
assign addrb = (ceb == 1'b1) ? wr_cnt[6:0] : 7'h0;

ram u_ram_inst0(
	.clka(clka),
    .dia(dia),
    .addra(addra),
    .wea(wea),
    .cea(cea),
    
    .clkb(clkb),
    .dob(dob),
    .addrb(addrb),
    .ceb(ceb)
);

endmodule
